package com.project.controller;

import com.alibaba.fastjson.JSON;
import com.project.pojo.*;
import com.project.service.AdminService;
import com.project.service.TeacherService;
import com.project.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.List;

@Controller
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private UserService userService;
    @Autowired
    private AdminService adminService;
    @Autowired
    private TeacherService teacherService;

    /**
     * 更改教室信息
     */
    @PostMapping("/updateRoom")
    @ResponseBody
    public String updateRoom(@RequestBody Room room) {
        //调用方法
        adminService.updateRoom(room);
        //返回成功表示
        return "updateSuccess";
    }

    /**
     * 添加 教室
     */
    @PostMapping("/addRoom")
    @ResponseBody
    public String addRoom(@RequestBody Room room) {
        //调用方法
        adminService.addRoom(room);
        //返回成功表示
        return "addSuccess";
    }

    /**
     * 更改教学楼信息
     */
    @PostMapping("/updateBuild")
    @ResponseBody
    public String updateBuild(@RequestBody Build build) {
        //调用方法
        adminService.updateBuild(build);
        //返回成功表示
        return "updateSuccess";
    }

    /**
     * 添加 教学楼
     */
    @PostMapping("/addBuild")
    @ResponseBody
    public String addBuild(@RequestBody Build build) {
        //调用方法
        adminService.addBuild(build);
        //返回成功表示
        return "addSuccess";
    }

    /**
     * 更改公告
     */
    @PostMapping("/updateNotice")
    @ResponseBody
    public String updateNotice(@RequestBody Notice notice) {
        //调用方法
        adminService.updateNotice(notice);
        //返回成功表示
        return "updateSuccess";
    }

    /**
     * 删除 公告
     */
    @GetMapping("/deleteNotice")
    @ResponseBody
    public String deleteNotice(long id) {
        //调用方法
        adminService.deleteNotice(id);
        //返回成功表示
        return "deleteSuccess";
    }

    /**
     * 添加 公告
     */
    @PostMapping("/addNotice")
    @ResponseBody
    public String addNotice(@RequestBody Notice notice) {
        //调用方法
        adminService.addNotice(notice);
        //返回成功表示
        return "addSuccess";
    }

    /**
     * 添加 教职工
     */
    @PostMapping("/addTeacher")
    @ResponseBody
    public String addTeacher(@RequestBody Teacher teacher) {
        //调用方法
        teacherService.addTeacher(teacher);
        //返回成功表示
        return "addSuccess";
    }

    /**
     * 删除 教师
     */
    @GetMapping("/deleteTeacher")
    @ResponseBody
    public String deleteTeacher(long id) {
        //调用方法
        teacherService.deleteTeacher(id);
        //返回成功表示
        return "deleteSuccess";
    }

    /**
     * 更改 教职工信息
     */
    @PostMapping("/updateTeacher")
    @ResponseBody
    public String updateTeacher(@RequestBody Teacher teacher) {
        //调用方法
        teacherService.updateTeacher(teacher);

        //返回成功表示
        return "updateSuccess";
    }

    /**
     * 查询 所有教职工
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @PostMapping("/selectAllTeacher")
    public void selectAllTeacher(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用方法查询
        List<Teacher> teacherList = teacherService.selectAllTeacher();

        //将数据转换为json数据传到前端
        String jsonString = JSON.toJSONString(teacherList);
        //写出数据（需要设置编码字符集）
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    /**
     * 更改 学生信息
     *
     * @throws ServletException
     * @throws IOException
     */
    @PostMapping("/updateUser")
    @ResponseBody
    public String updateUser(@RequestBody User user) {
        //调用方法
        userService.updateUser(user);
        return "updateSuccess";
    }

    /**
     * 删除 学生
     */
    @GetMapping("/deleteUser")
    @ResponseBody
    public String deleteUser(long id) {
        //调用方法
        userService.deleteUser(id);
        //返回成功表示
        return "deleteSuccess";
    }

    /**
     * 添加 学生用户
     */
    @PostMapping("/addUser")
    @ResponseBody
    public String addUser(@RequestBody User user) {
        //调用方法
        userService.addUser(user);

        //返回成功表示
        return "addSuccess";
    }

    /**
     * 查询 全部学生用户
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @PostMapping("/selectAllUser")
    public void selectAllUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用方法查询
        List<User> userList = userService.selectAllUser();

        //将数据转换为json数据传到前端
        String jsonString = JSON.toJSONString(userList);
        //写出数据（需要设置编码字符集）
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    /**
     * 管理员 更改个人信息
     */
    @PostMapping("/updateAdmin")
    @ResponseBody
    public String updateAdmin(@RequestBody Admin admin) {
        //调用方法
        adminService.update(admin);
        //响应成功标识
        return "updateSuccess";
    }

    /**
     * 查询 所有管理员信息
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @PostMapping("/selectAllAdmin")
    public void selectAllAdmin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用方法查询
        List<Admin> adminList = adminService.selectAllAdmin();

        //将数据转换为json数据传到前端
        String jsonString = JSON.toJSONString(adminList);
        //写出数据（需要设置编码字符集）
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

    /**
     * 根据信息查询 管理员
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @PostMapping("/selectAdminByInfo")
    public void selectAdminByInfo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取页面信息
        BufferedReader br = request.getReader();
        String params = br.readLine();//json字符串
        //包装实体类
        Admin admin = JSON.parseObject(params, Admin.class);

        //调用方法
        List<Admin> adminList = adminService.selectByInfo(admin);

        //转为JSON数据
        String adminListJson = JSON.toJSONString(adminList);

        //写出数据（需要设置编码字符集）
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(adminListJson);
    }
}
